Flutter Bloc
Business Logic Component
UIから分離して、ビジネスロジックだけを担当する部品/要素のこと
実装例
Blocパターンの実装例
code:a.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class A extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Provider<Bloc>(
builder: (context) => B(),
dispose: (context, bloc) => bloc.dispose(),
);
}
}
code:b.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class B extends StatelessWidget {
@override
Widget build(BuildContext context) {
final bloc = Provider.of<Bloc>(context);
return Center(
child: Column(
children: <Widget>[
StreamBuilder<int>(
stream: bloc.count,
initialData: 0,
builder: (context, snapshot) => Text(
snapshot.data,
),
),
RaisedButton(
child: Text('increment'),
onPress: bloc.increment,
),
],
),
);
}
}
code:bloc.dart
import 'dart:async';
class Bloc {
final _countController = StreamController<int>.broadcast();
Stream<int> get count => _countController.stream;
int _count = 0;
void increment() {
_count++;
_countController.sink.add(_count);
}
void dispose() {
_countController.close();
}
}
ref